// pages/shopcart/shopcart.js
var noLogin = require("../template/noLogin.js");
const app = getApp();
Page({
  data: {
    carts: null, //购物车数据列表
    totalPrice: '0.00', //总价，初始0
    selectAllStates: false, //全选状态，默认全选
    isNone: false, //是否显示空购物车提示，false不显示，true显示
    hasUserInfo: true   //判断是否获取了用户数据  默认true为获取了
  },
  
  onShow: function () {  
    if (!wx.getStorageSync('userInfo')){
      noLogin.showNoLogin(this).then(() => {
        this.init(); //用户授权后更新用户数据
      }).catch(() => {
        this.setData({ hasUserInfo: false })
      });  //判断用户未登录，弹出授权窗口
    }else{
      this.setData({ hasUserInfo: true }); //判断用户已登录，关闭授权窗口
      this.init();
    }
  },

  //初始化数据
  init(cb) {
    wx.showNavigationBarLoading();
    wx.showLoading({ title: '请稍等...', mask: true });
    wx.request({
      url: app.baseURL + 'Car&a=index',
      data: { user_id: app.globalData.userId },
      success: (res) => {
        if (res.statusCode == 200) {
          if (res.data.status == 1 || res.data.status == 0) {
            this.setData({ 
              totalPrice: '0.00', //总价，初始0
              selectAllStates: false, //全选状态，默认全选
            }); 
            this.updateCarts(res.data.info);
            typeof cb == 'function' && cb();
          }
          wx.hideNavigationBarLoading();
          wx.hideLoading();
        }
      }  
    })
  },

  //用户确认授权
  WeChatUserInfo: function (e) {
    if (e.detail.userInfo) {
      this.setData({ hasUserInfo: true });//发起登录
      noLogin.getUserInfo(this).then(() => {
        this.init();//用户授权后更新用户数据
      });
    } else {
      wx.showModal({
        title: '温馨提示',
        content: '拒绝微信授权将无法使用部分功能',
        success: res => {
          if (res.confirm) {
            wx.switchTab({ url: '/pages/index/index' });
            this.setData({ hasUserInfo: true });
          }
        }
      })
    }
  },

  //计算总价
  getTotalPrice(){
    let carts = this.data.carts,
        total = 0;
    //遍历计算总价    
    carts.forEach( (item) => {
      if ( item.selected ) total += item.price * item.nums;
    });
    //更新价格数据
    this.setData({
      totalPrice: total.toFixed(2)
    }); 
  },

  //选中商品
  selectList(e){
    let carts = this.data.carts,//商品列表
        selectAllStates = true; //全选状态,初始化一个全选的状态，然后遍历商品，如有未选中的则变更为未全选状态，并退出遍历
    //当前复选框下标    
    const index = e.currentTarget.dataset.index;
    //当前复选框选中、取消选中
    carts[index].selected = !carts[index].selected;
    //遍历商品列表，如果取消某选中某个商品，则全选的按钮也取消选中
    //如果所有复选框全部选中，则全选按钮也自动选中
    carts.forEach((item) => {
      console.log(item.selected)
      if (item.selected == false || !item.selected) { selectAllStates = false; return;}
    });
    //更新数据   
    this.setData({
      carts: carts,
      selectAllStates: selectAllStates
    });
    //更新价格总计
    this.getTotalPrice();
  },

  //选择全部
  selectAll(){
    let carts = this.data.carts,
        selectAllStates = !this.data.selectAllStates;
    //遍历商品列表，将每个商品的selected属性设置成true或者false实现全选或全不选    
    carts.forEach( (item) => {
      item.selected = selectAllStates;
    });
    //更新数据    
    this.setData({
      selectAllStates: selectAllStates,
      carts: carts
    });
    //更新合计的钱数
    this.getTotalPrice();   
  },

  //增加商品数量
  addCount(e){
    const index = e.currentTarget.dataset.index;
    const cartId = e.currentTarget.dataset.cart_id;
    let carts = this.data.carts;
    if (e.currentTarget.dataset.limit!=0&&carts[index].nums >= e.currentTarget.dataset.limit){
      wx.showToast({
        title: '不能超过最大购买数',
        icon: 'none'
      });
      return false
    }
    carts[index].nums ++;
    wx.showLoading({ title: '加载中'})
    wx.request({
      url: app.baseURL +'Car&a=CarListOper',
      data: {
        cart_id: cartId,
        cart_num: carts[index].nums,
        user_id: app.globalData.userId
      },
      success: (res) => {
        if (res.statusCode == 200) {
          //操作成功
          if (res.data.status == 1) {
            wx.hideLoading();
            //将购物车商品数量存入本地并更新
            // wx.setStorageSync("car_num", res.data.car_num);
            // app.setBadge(2, res.data.car_num); 
            //更新数据
            this.updateCarts(carts);
          //超出最大库存  
          } else if (res.data.status == 0) {
            carts[index].nums --;
            this.toast('不能超过该商品最大库存');
            //更新数据
            this.updateCarts(carts); 
          }
        }
      }, 
      fail : (err) => {
        carts[index].nums --;
        this.toast('网络错误，请重试！');
        //更新数据
        this.updateCarts(carts); 
      }
    })
    //更新总价
    this.getTotalPrice();
    
  },

  //减少商品数量
  reduceCount(e){
    const index = e.currentTarget.dataset.index;
    const cartId = e.currentTarget.dataset.cart_id;
    let carts = this.data.carts;
    if (carts[index].nums > 1) {
      carts[index].nums --; 
      wx.showLoading({ title: '加载中' })
      //发送数量请求
      wx.request({
        url: app.baseURL + 'Car&a=CarListOper',
        data: {
          cart_id: cartId,
          cart_num: carts[index].nums,
          user_id: app.globalData.userId
        },
        success: (res) => {
          if (res.statusCode == 200) {
            if (res.data.status == 1) {
              wx.hideLoading();
              //更新数据
              this.updateCarts(carts); 
              //将购物车商品数量存入本地并更新
              // wx.setStorageSync("car_num", res.data.car_num);
              // app.setBadge(2, res.data.car_num);
            } 
          }
        },
        fail: (err) => {
          carts[index].nums ++;
          this.toast('网络错误，请重试！');
          //更新数据
          this.updateCarts(carts); 
        }
      });
      //更新总价
      this.getTotalPrice();
    }  
    
  },

  //删除单个商品
  deleteGoods(e){
    const index = e.currentTarget.dataset.index;
    const cartId = e.currentTarget.dataset.cart_id;
    let carts = this.data.carts;
    wx.showModal({
      title: '温馨提示',
      content: '确定删除当前商品吗？',
      confirmColor:"#f00",
      success:(res) => {
        if (res.confirm) {
          wx.showLoading({ title: '加载中' });
          wx.request({
            url: app.baseURL + 'Car&a=delete_cart_item',
            data: {
              cart_id: cartId,
              user_id: app.globalData.userId
            },
            success: (res) => {
              if (res.statusCode == 200) {
                if (res.data.status == 1) {
                  //购物车商品数量，数字类型
                  let num = res.data.car_num; 
                  //将购物车商品数量存入本地并更新
                  // wx.setStorageSync("car_num", num + '0');
                  // wx.removeTabBarBadge(2);
                  // app.setBadge(2, num + '');
                  //更新数据
                  carts.splice(index, 1);
                  this.updateCarts(carts);         
                  //更新总价
                  this.getTotalPrice();
                  wx.hideLoading();
                } 
              }  
            }
          });
        }  
      }
    })
  },

  //结算
  toPlaceOrder(){
    let idArr = [];
    this.data.carts.forEach((item) => {
      if (item.selected) { idArr.push(item.id)};
    });
    if (!idArr.length) { this.toast('您还没选择宝贝哦'); return};
    idArr = JSON.stringify(idArr);
    wx.navigateTo({
      url: '/pages/placeorder/placeorder?type=2&cart_ids=' + idArr,
    });
  },

  //更新数据函数
  updateCarts(data) {
    this.setData({
      carts: data,
      isNone: !data.length
    })
  },

  //toast提示，默认没有图标
  toast(msg, ico) {
    wx.showToast({
      title: msg,
      icon: ico || 'none'
    })
  },

  //监听用户下拉操作
  onPullDownRefresh(){
    this.init(function(){
      wx.stopPullDownRefresh();
    });
  },

  //监听页面隐藏
  onHide: function() {
    this.setData({
      selectAllStates: false
    })
  },
}) 